package grupobbva.pe.operhc.util;

import static grupobbva.pe.operhc.util.Constant.*;
import grupobbva.pe.operhc.domain.Contratacion;
import grupobbva.pe.operhc.domain.CuentaCargo;
import grupobbva.pe.operhc.domain.CuentaCargoDetalle;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.rpc.ServiceException;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.log4j.Logger;

import pe.com.grupobbva.ohc.hy10.CtConOhcHY10Rq;
import pe.com.grupobbva.ohc.hy10.CtConOhcHY10Rs;
import pe.com.grupobbva.ohc.hy10.OHC_HY10_Service;
import pe.com.grupobbva.ohc.hy10.OHC_HY10_ServiceLocator;
import pe.com.grupobbva.ohc.hy20.CtConOhcHY20Rq;
import pe.com.grupobbva.ohc.hy20.CtConOhcHY20Rs;
import pe.com.grupobbva.ohc.hy20.CtPrestamo;
import pe.com.grupobbva.ohc.hy20.CtTarjeta;
import pe.com.grupobbva.ohc.hy20.OHC_HY20_Service;
import pe.com.grupobbva.ohc.hy20.OHC_HY20_ServiceLocator;
import pe.com.grupobbva.ohc.hy21.CtConOhcHY21Rq;
import pe.com.grupobbva.ohc.hy21.CtConOhcHY21Rs;
import pe.com.grupobbva.ohc.hy21.OHC_HY21_Service;
import pe.com.grupobbva.ohc.hy21.OHC_HY21_ServiceLocator;
import pe.com.grupobbva.ohc.hy30.CtConOhcHY30Rq;
import pe.com.grupobbva.ohc.hy30.CtConOhcHY30Rs;
import pe.com.grupobbva.ohc.hy30.OHC_HY30_Service;
import pe.com.grupobbva.ohc.hy30.OHC_HY30_ServiceLocator;
import pe.com.grupobbva.ohc.hy31.CtConOhcHY31Rq;
import pe.com.grupobbva.ohc.hy31.CtConOhcHY31Rs;
import pe.com.grupobbva.ohc.hy31.OHC_HY31_Service;
import pe.com.grupobbva.ohc.hy31.OHC_HY31_ServiceLocator;
import pe.com.grupobbva.ohc.hy40.CtConOhcHY40Rq;
import pe.com.grupobbva.ohc.hy40.CtConOhcHY40Rs;
import pe.com.grupobbva.ohc.hy40.OHC_HY40_Service;
import pe.com.grupobbva.ohc.hy40.OHC_HY40_ServiceLocator;
import pe.com.grupobbva.ohc.pe29.CtConOhcPE29Rq;
import pe.com.grupobbva.ohc.pe29.CtConOhcPE29Rs;
import pe.com.grupobbva.ohc.pe29.CtDatosRelacion;
import pe.com.grupobbva.ohc.pe29.OHC_PE29_ServiceLocator;
import pe.com.grupobbva.ohc.qf3b.CtConOhcQF3BRq;
import pe.com.grupobbva.ohc.qf3b.CtConOhcQF3BRs;
import pe.com.grupobbva.ohc.qf3b.OHC_QF3B_Service;
import pe.com.grupobbva.ohc.qf3b.OHC_QF3B_ServiceLocator;
import pe.com.grupobbva.xsd.ps9.CtHeaderRs;

public class InvokeWS {
	
	private static Logger logger = Logger.getLogger(InvokeWS.class);
	
	public static CtConOhcHY10Rs consumirHY10(String codigoUsuario, String tipoDocumento, String numeroDocumento, String codigoCentral){
		codigoUsuario = Utilities.saltarUsuarioExterno(codigoUsuario);
		OHC_HY10_Service serviceLocator = new OHC_HY10_ServiceLocator();
		CtConOhcHY10Rq requestHY10 = new CtConOhcHY10Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(FN_DEFAULT);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestHY10.setHeader(headerRq);
		pe.com.grupobbva.ohc.hy10.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy10.CtBodyRq();
		bodyRq.setTipoDocumento(tipoDocumento);
		bodyRq.setNumeroDocumento(numeroDocumento);
		bodyRq.setCodigoCentral(codigoCentral);
		bodyRq.setGrupoBuro("");
		bodyRq.setClasificacionBBVA("");
		bodyRq.setIndRelevanciaPublica("");
		bodyRq.setPorcentEndeudamiento("");
		requestHY10.setData(bodyRq);
		CtConOhcHY10Rs response = null;
		try {
			response = serviceLocator.getOHC_HY10_Port().callHY10(requestHY10);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	public static CtConOhcHY20Rs consumirHY20(String codigoUsuario, String tipoOpcion, Contratacion contratacion) {
		if(Utilities.esUsuarioExterno(codigoUsuario)){
			return fakeHY20();
		}
		OHC_HY20_Service serviceLocator = new OHC_HY20_ServiceLocator();
		CtConOhcHY20Rq requestHY20 = new CtConOhcHY20Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(tipoOpcion);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_FIJO + contratacion.getTerminalCLIO());
		requestHY20.setHeader(headerRq);
		pe.com.grupobbva.ohc.hy20.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy20.CtBodyRq();
		bodyRq.setTipoDocumento(contratacion.getTipoDocumento());
		bodyRq.setNumeroDocumento(contratacion.getNumeroDocumento());
		bodyRq.setOficinaGestora(contratacion.getOficinaGestora());
		bodyRq.setFamiliaProducto(contratacion.getContrato().getTipoProducto());
		bodyRq.setTipoProducto(contratacion.getFamilia());
		bodyRq.setUsuarioVenta(contratacion.getUsuarioVendedor());
		bodyRq.setCanalVenta(contratacion.getCodigoCanal());
		bodyRq.setSubCanalVenta(contratacion.getCodigoSubCanal());
		//INI CCC CAMPOS PARA ACTUALIZAR CARRITO
		//bodyRq.setCampanhaCar(contratacion.getCampanha());
		bodyRq.setSecuencia(contratacion.getSecuencia());
		//FIN CCC 
		if(FN_ALTA_CONTRATO.equals(tipoOpcion)) {
			if(FAMILIA_PRESTAMOS.equalsIgnoreCase(contratacion.getFamilia())) {
				CtPrestamo prestamo = new CtPrestamo();
				prestamo.setSubproducto(contratacion.getContrato().getTipoSubProducto());
				prestamo.setImporte(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getMonto(), CIEN, DIGITOS_IMPORTE));
				prestamo.setPlazo(Utilities.formateaPlazo(contratacion.getContrato().getPlazo()));
				prestamo.setTasa(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getTasa(), MILLON, DIGITOS_TASA));
				prestamo.setCuentaCargo(contratacion.getCuentaCargo());
				prestamo.setGestor(contratacion.getGestor());
				prestamo.setCampanha(contratacion.getCampanha());
				prestamo.setUsuarioAutorizador(contratacion.getUsuarioAutorizador());
				prestamo.setContrato(contratacion.getContrato().getNumeroContrato());
				prestamo.setDiaPago(contratacion.getDiaPago());
				prestamo.setCodigoEstablecimiento(contratacion.getCodigoEstablecimiento());
				bodyRq.setPrestamo(prestamo);
			} else if(FAMILIA_TARJETAS.equalsIgnoreCase(contratacion.getFamilia())) {
				CtTarjeta tarjeta = new CtTarjeta();
				tarjeta.setTipo(contratacion.getContrato().getTipoSubProducto());
				tarjeta.setLimiteCredito(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getMonto(), UNO, DIGITOS_LIMITE));
				tarjeta.setTasa(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getTasa(), MILLON, DIGITOS_TASA));
				tarjeta.setFormaPago(contratacion.getFormaPago());
				tarjeta.setDiaLiquidacion(contratacion.getDiaLiquidacion());
				tarjeta.setNumeroCuenta(contratacion.getCuentaCargo());
				bodyRq.setTarjeta(tarjeta);
			}
		} else if(FN_BAJA_CONTRATO.equals(tipoOpcion)) {
			if(FAMILIA_PRESTAMOS.equalsIgnoreCase(contratacion.getFamilia())) {
				CtPrestamo prestamo = new CtPrestamo();
				prestamo.setContrato(contratacion.getContrato().getNumeroContrato());
				bodyRq.setPrestamo(prestamo);
			} else if(FAMILIA_TARJETAS.equalsIgnoreCase(contratacion.getFamilia())) {
				CtTarjeta tarjeta = new CtTarjeta();
				tarjeta.setContrato(contratacion.getContrato().getNumeroContrato());
				bodyRq.setTarjeta(tarjeta);
			}
		}
		if(logger.isDebugEnabled()) logger.debug(bodyRq);
		requestHY20.setData(bodyRq);
		CtConOhcHY20Rs response = null;
		try {
			response = serviceLocator.getOHC_HY20_Port().callHY20(requestHY20);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	public static CtConOhcHY30Rs consumirHY30(String codigoUsuario, String teclaPulsada, String tipoDocumento, String numeroDocumento, String control) {
		codigoUsuario = Utilities.saltarUsuarioExterno(codigoUsuario);
		OHC_HY30_Service serviceLocator = new OHC_HY30_ServiceLocator();
		CtConOhcHY30Rq requestHY30 = new CtConOhcHY30Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(teclaPulsada);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestHY30.setHeader(headerRq);
		pe.com.grupobbva.ohc.hy30.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy30.CtBodyRq();
		bodyRq.setTipoDocumento(tipoDocumento);
		bodyRq.setNumeroDocumento(numeroDocumento);
		bodyRq.setControl(control);
		requestHY30.setData(bodyRq);
		CtConOhcHY30Rs response = null;
		try {
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(requestHY30.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(requestHY30.getData(), ToStringStyle.MULTI_LINE_STYLE));
			response = serviceLocator.getOHC_HY30_Port().callHY30(requestHY30);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	public static CtConOhcHY40Rs consumirHY40(String codigoUsuario, String tipoDocumento, String numeroDocumento, BigDecimal cuotaReevaluada, BigDecimal ingresoTotal){
		if(Utilities.esUsuarioExterno(codigoUsuario)){
			return fakeHY40();
		}
		OHC_HY40_Service serviceLocator = new OHC_HY40_ServiceLocator();
		CtConOhcHY40Rq requestHY40 = new CtConOhcHY40Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(FN_DEFAULT);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestHY40.setHeader(headerRq);
		pe.com.grupobbva.ohc.hy40.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy40.CtBodyRq();
		bodyRq.setTipoDocumento(tipoDocumento);
		bodyRq.setNumeroDocumento(numeroDocumento);
		bodyRq.setCuotaReevaluada(Utilities.cadenaNumeroDecimal(cuotaReevaluada, CIEN, DIGITOS_IMPORTE));
		bodyRq.setTipoProceso(PROCESO_REEVALUACION);
		bodyRq.setIngresoReevaluado(Utilities.cadenaNumeroDecimal(ingresoTotal, CIEN, DIGITOS_IMPORTE));
		requestHY40.setData(bodyRq);
		CtConOhcHY40Rs response = null;
		try {
			response = serviceLocator.getOHC_HY40_Port().callHY40(requestHY40);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			//if(logger.isDebugEnabled()) logger.debug(response.getData());
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	public static CtConOhcQF3BRs consumirQF3B(String codigoUsuario, String registro){
		codigoUsuario = Utilities.saltarUsuarioExterno(codigoUsuario);
		OHC_QF3B_Service serviceLocator = new OHC_QF3B_ServiceLocator();
		CtConOhcQF3BRq requestQF3B = new CtConOhcQF3BRq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(FN_DEFAULT);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestQF3B.setHeader(headerRq);
		pe.com.grupobbva.ohc.qf3b.CtBodyRq data = new pe.com.grupobbva.ohc.qf3b.CtBodyRq();
		data.setCodigoUsuario(registro);
		requestQF3B.setData(data);
		CtConOhcQF3BRs response = null;
		try {
			response = serviceLocator.getOHC_QF3B_Port().callQF3B(requestQF3B);
			if(logger.isDebugEnabled()) logger.debug(response.getHeader());
			if(logger.isDebugEnabled()) logger.debug(response.getData());
			
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	private static CtConOhcHY20Rs fakeHY20() {
		pe.com.grupobbva.xsd.ps9.CtHeaderRs headerRs = new CtHeaderRs("9999", "HYE99990EL USUARIO NO TIENE AUTORIDAD PARA EJECUTAR ESTA TRANSACCION", "");
		pe.com.grupobbva.ohc.hy20.CtBodyRs bodyRs = new pe.com.grupobbva.ohc.hy20.CtBodyRs();
		CtConOhcHY20Rs response = new CtConOhcHY20Rs(headerRs, bodyRs);
		return response;
	}
	
	private static CtConOhcHY40Rs fakeHY40() {
		pe.com.grupobbva.xsd.ps9.CtHeaderRs headerRs = new CtHeaderRs("9999", "HYE99990EL USUARIO NO TIENE AUTORIDAD PARA EJECUTAR ESTA TRANSACCION", "");
		CtConOhcHY40Rs response = new CtConOhcHY40Rs(headerRs);
		return response;
	}
	
	
	public static CuentaCargo consultarCuentaCargo(String codigoUsuario, String tipoDocumento, String numeroDocumento,String codigoCentral) throws Exception{
		String teclaPulsada = FN_DEFAULT;
		String tipoMensaje = TM_DEFAULT;
		String control = "";
		CuentaCargo cuentasCargoTotal = new CuentaCargo();
		List<CuentaCargoDetalle> listaDetalle = new ArrayList<CuentaCargoDetalle>();
		do {
			if(StringUtils.isNotBlank(control) && FIN_CONTINUACION_PE29.equals(control)) {
				teclaPulsada = FN_PAGINA_SGTE;
				tipoMensaje = TM_NEXT;
			}
			CtConOhcPE29Rs response = InvokeWS.consumirPE29(codigoUsuario, teclaPulsada, tipoDocumento, numeroDocumento, codigoCentral, tipoMensaje);
			
			if(response != null && response.getData()!=null) {
				
				cuentasCargoTotal.setNumeroCliente(response.getData().getNumeroCliente());
				cuentasCargoTotal.setNombre(response.getData().getNombre());
				cuentasCargoTotal.setCodigoCliente(response.getData().getCodigoCliente());
				cuentasCargoTotal.setApellido(response.getData().getApellido());
				cuentasCargoTotal.setSituacion(response.getData().getSituacion());
				cuentasCargoTotal.setOficinaPrincipal(response.getData().getOficinaPrincipal());
				
				control = response.getHeader().getAviso().substring(0,7);
				CuentaCargoDetalle cuentaDetalle = null;
				String contrato = "";
				for (CtDatosRelacion datosRelacion : response.getData().getDatosRelacion()) {
					cuentaDetalle = new CuentaCargoDetalle();
					try{
						if(datosRelacion.getNumeroContrato() != null && !"".equals(datosRelacion.getNumeroContrato())){
							if(TIPO_CTACTE.equals(datosRelacion.getNumeroContrato().substring(10, 12)) || 
							   TIPO_AHORRO.equals(datosRelacion.getNumeroContrato().substring(10, 12))) {									
							
								contrato = datosRelacion.getNumeroContrato().replace("-", "");
								cuentaDetalle.setTipoCuenta(contrato.substring(8, 10));
								contrato = contrato.substring(0,8) + "00" + contrato.substring(8,18);
								cuentaDetalle.setAdicio(datosRelacion.getAdicio());
								cuentaDetalle.setIndsist(datosRelacion.getIndsist());
								cuentaDetalle.setNumeroContrato(contrato);
								cuentaDetalle.setProducto(datosRelacion.getProducto());
								cuentaDetalle.setSaldo(datosRelacion.getSaldo());
								cuentaDetalle.setSitcla(datosRelacion.getSitcla());
								cuentaDetalle.setDescripcionContrato(datosRelacion.getProducto().substring(0,3) + " " +
																     contrato+ " " + datosRelacion.getSaldo());

								listaDetalle.add(cuentaDetalle);
							}
						}
					}catch (Exception e) {
						e.printStackTrace();
					}	
					
				}
			}else{
				control = response.getHeader().getAviso().substring(0,7);
			}
		} while((StringUtils.isNotBlank(control) &&  FIN_CONTINUACION_PE29.equals(control)) );
		
		Collections.sort(listaDetalle, CuentaCargoDetalle.TipoCuentaComparator);
		cuentasCargoTotal.setDetalleCuenta(listaDetalle);
		
		return cuentasCargoTotal;
	}
	
	public static void main(String[] args) {
				
		List<String> listaContratos = new ArrayList<String>();
		Utilities.BROKER_SOCKET = "118.180.36.26:7808";
		Utilities.TERMINAL_LOGICO = RangoTerminal.getTerminalLogico("7%50-7%59");
		Utilities.TERMINAL_CONTABLE = "7%50";
		/*CtConOhcHY30Rs rs = consumirHY30("P015270", "00", "L", "29523728", "");
		String[] detalles = rs.getData().getDetalles();
		for (String detalle : detalles) {
			listaContratos.add(detalle);
		}
		
		while(StringUtils.isNotBlank(rs.getData().getControl())) {
			Utilities.TERMINAL_LOGICO = RangoTerminal.getTerminalLogico("7%50-7%59");
			rs = consumirHY30("P015270", "08", "L", "29523728", rs.getData().getControl());
			detalles = rs.getData().getDetalles();
			for (String detalle : detalles) {
				listaContratos.add(detalle);
			}
		}
		
		int i = 0;
		for (Iterator<String> iterator = listaContratos.iterator(); iterator.hasNext();) {
			String string = (String) iterator.next();
			System.out.println((++i) + string);
		}
		*/
		
		//CtConOhcPE29Rs rs = consumirPE29("P017073", "00", "", "", "77780881", "1");
		//System.out.println(rs);
		CuentaCargo rss=null;
		try {
			rss = consultarCuentaCargo("P017073", "L", "04040005","90008603");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println(rss);
		
		for(CuentaCargoDetalle deta : rss.getDetalleCuenta()){
			System.out.println(deta.getNumeroContrato() + "    "+deta.getDescripcionContrato());
		}
		
		/*CtConOhcQF3BRs rs = consumirQF3B("P007395");
		//if(logger.isDebugEnabled()) logger.debug(Utilities.formateaNumero(new BigDecimal(1500), PATRON_MONEDA, new Integer[] {13, 2}));
		//if(logger.isDebugEnabled()) logger.debug(Utilities.formateaNumero(new BigDecimal(12.457), PATRON_TASA, new Integer[] {3, 6}));
		if(logger.isDebugEnabled()) logger.debug(ArrayUtils.contains(Utilities.splitByPosition(rs.getAplfacu(), 2), "AE"));
		if(logger.isDebugEnabled()) logger.debug(ArrayUtils.toString(Utilities.splitByPosition(rs.getAplfacu(), 2)));
		*/
	}
	
	
	//ini MCG20141124

	public static CtConOhcHY31Rs consumirHY31(String codigoUsuario, String teclaPulsada, String tipoDocumento, String numeroDocumento, String control,String estado) {
		codigoUsuario = Utilities.saltarUsuarioExterno(codigoUsuario);
		OHC_HY31_Service serviceLocator = new OHC_HY31_ServiceLocator();
		CtConOhcHY31Rq requestHY31 = new CtConOhcHY31Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(teclaPulsada);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestHY31.setHeader(headerRq);
		
		pe.com.grupobbva.ohc.hy31.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy31.CtBodyRq();
		bodyRq.setTipoDocumento(tipoDocumento);
		bodyRq.setNumeroDocumento(numeroDocumento);
		bodyRq.setCampanha("");
		bodyRq.setFechaAlta("");
		bodyRq.setEstado(estado);
		bodyRq.setControl(control);
		requestHY31.setData(bodyRq);
		CtConOhcHY31Rs response = null;
		try {
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(requestHY31.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(requestHY31.getData(), ToStringStyle.MULTI_LINE_STYLE));
			response = serviceLocator.getOHC_HY31_Port().callHY31(requestHY31);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	private static CtConOhcHY31Rs fakeHY31() {
		pe.com.grupobbva.xsd.ps9.CtHeaderRs headerRs = new CtHeaderRs("9999", "HYE99990EL USUARIO NO TIENE AUTORIDAD PARA EJECUTAR ESTA TRANSACCION", "");
		pe.com.grupobbva.ohc.hy31.CtBodyRs bodyRs = new pe.com.grupobbva.ohc.hy31.CtBodyRs();
		CtConOhcHY31Rs response = new CtConOhcHY31Rs(headerRs, bodyRs);
		return response;
	}	
	
	private static CtConOhcHY21Rs fakeHY21() {
		pe.com.grupobbva.xsd.ps9.CtHeaderRs headerRs = new CtHeaderRs("9999", "HYE99990EL USUARIO NO TIENE AUTORIDAD PARA EJECUTAR ESTA TRANSACCION", "");
		pe.com.grupobbva.ohc.hy21.CtBodyRs bodyRs = new pe.com.grupobbva.ohc.hy21.CtBodyRs();
		CtConOhcHY21Rs response = new CtConOhcHY21Rs(headerRs, bodyRs);
		return response;
	}
	
	
	public static CtConOhcHY21Rs consumirHY21(String codigoUsuario, String tipoOpcion, Contratacion contratacion) {
		/*if(Utilities.esUsuarioExterno(codigoUsuario)){
			return fakeHY21();
		}*/
		OHC_HY21_Service serviceLocator = new OHC_HY21_ServiceLocator();
		CtConOhcHY21Rq requestHY21 = new CtConOhcHY21Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq headerRq = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		headerRq.setUsuario(codigoUsuario);
		headerRq.setOpcionAplicacion(tipoOpcion);
		headerRq.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		headerRq.setTerminalContable(Utilities.TERMINAL_CONTABLE);
		requestHY21.setHeader(headerRq);
		pe.com.grupobbva.ohc.hy21.CtBodyRq bodyRq = new pe.com.grupobbva.ohc.hy21.CtBodyRq();
		
		bodyRq.setTipoDocumento(contratacion.getTipoDocumento());
		bodyRq.setNumeroDocumento(contratacion.getNumeroDocumento());
		//bodyRq.setCampanha(contratacion.getCampanha());
		
		if(FN_ALTA_CARRITO.equals(tipoOpcion)) {
			bodyRq.setCampanha(contratacion.getCampanha());
			bodyRq.setOficinaGestora(contratacion.getOficinaGestora());
			bodyRq.setSecuencia("");
			bodyRq.setTipoProducto(contratacion.getContrato().getTipoProducto());
			bodyRq.setFamiliaProducto(contratacion.getFamilia());
			//bodyRq.setSubProducto(contratacion.getContrato().getTipoSubProducto());
			bodyRq.setSubProducto(contratacion.getContrato().getIdSubProducto());
			
			bodyRq.setImporteProducto(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getMonto(), CIEN, DIGITOS_IMPORTE));
			bodyRq.setDivisa(contratacion.getContrato().getDivisa());
			bodyRq.setTasaProducto(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getTasa(), DIEZ_MIL, 7));
			bodyRq.setPlazoProducto(Utilities.formateaPlazoCarrito(contratacion.getContrato().getPlazo()));
			bodyRq.setCuotaProducto(Utilities.cadenaNumeroDecimal(contratacion.getContrato().getCuota(), CIEN, DIGITOS_IMPORTE));
			
			bodyRq.setNumeroSolicitud("");
			
		} else if(FN_BAJA_CARRITO.equals(tipoOpcion)) {
			if(contratacion.getNumeroSolicitud()!=null && !"".equals(contratacion.getNumeroSolicitud())){
				bodyRq.setCampanha(StringUtils.substring(contratacion.getNumeroSolicitud(), 12, 18).trim());
			}else{
				bodyRq.setCampanha(contratacion.getCampanha());
			}
			
			bodyRq.setSecuencia(contratacion.getSecuencia());
			bodyRq.setNumeroSolicitud(contratacion.getNumeroSolicitud());
			bodyRq.setOficinaGestora(contratacion.getOficinaGestora());

			bodyRq.setTipoProducto("");
			bodyRq.setFamiliaProducto("");
			bodyRq.setSubProducto("");
			bodyRq.setImporteProducto("");
			bodyRq.setDivisa("");
			bodyRq.setTasaProducto("");
			bodyRq.setPlazoProducto("");
			bodyRq.setCuotaProducto("");			
			
		} else if(FN_BAJA_CARRITO_MASIVA.equals(tipoOpcion)) {
			if(contratacion.getNumeroSolicitud()!=null && !"".equals(contratacion.getNumeroSolicitud())){
				bodyRq.setCampanha(StringUtils.substring(contratacion.getNumeroSolicitud(), 12, 18).trim());
			}else{
				bodyRq.setCampanha(contratacion.getCampanha());
			}
			
			bodyRq.setSecuencia("");
			bodyRq.setNumeroSolicitud("");			
			bodyRq.setOficinaGestora(contratacion.getOficinaGestora());
			
			bodyRq.setTipoProducto("");
			bodyRq.setFamiliaProducto("");
			bodyRq.setSubProducto("");
			bodyRq.setImporteProducto("");
			bodyRq.setDivisa("");
			bodyRq.setTasaProducto("");
			bodyRq.setPlazoProducto("");
			bodyRq.setCuotaProducto("");	
			
		}	else if(FN_PRECONTRACION_CARRITO.equals(tipoOpcion)) {
			bodyRq.setCampanha(contratacion.getCampanha());
			bodyRq.setSecuencia(contratacion.getSecuencia());
			bodyRq.setNumeroSolicitud(contratacion.getNumeroSolicitud());
			bodyRq.setOficinaGestora(contratacion.getOficinaGestora());
			
			bodyRq.setTipoProducto("");
			bodyRq.setFamiliaProducto("");
			bodyRq.setSubProducto("");
			bodyRq.setImporteProducto("");
			bodyRq.setDivisa("");
			bodyRq.setTasaProducto("");
			bodyRq.setPlazoProducto("");
			bodyRq.setCuotaProducto("");	
		}
		
		if(logger.isDebugEnabled()) logger.debug(bodyRq);
		requestHY21.setData(bodyRq);
		CtConOhcHY21Rs response = null;
		try {
			response = serviceLocator.getOHC_HY21_Port().callHY21(requestHY21);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		return response;
	}
	
	
	//fin MCG20141124
	
	//ini:ccc
	public static CtConOhcPE29Rs consumirPE29(String codigoUsuario,String tipoOpcion,String tipoDocumento, String numeroDocumento,String codigoCentral,String tipoMensaje) {
		
		OHC_PE29_ServiceLocator serviceLocator = new OHC_PE29_ServiceLocator();
		CtConOhcPE29Rq conOhcPE29Rq = new CtConOhcPE29Rq();
		pe.com.grupobbva.xsd.ps9.CtHeaderRq header = new pe.com.grupobbva.xsd.ps9.CtHeaderRq();
		
		header.setOpcionAplicacion(tipoOpcion);
		header.setTerminalContable(Utilities.TERMINAL_CONTABLE); //+CLIO
		header.setTerminalLogico(Utilities.TERMINAL_LOGICO);
		header.setUsuario(codigoUsuario);
		
		pe.com.grupobbva.ohc.pe29.CtBodyRq   data   = new pe.com.grupobbva.ohc.pe29.CtBodyRq();
		
		data.setNumeroCliente(codigoCentral);
		data.setTipoDocumento(tipoDocumento);
		data.setNumeroDocumento(numeroDocumento);
		data.setEstado(ESTADO_ACTIVO_PE29);
		data.setTipoMensaje(tipoMensaje);
		
		conOhcPE29Rq.setHeader(header);
		conOhcPE29Rq.setData(data);
		
		if(logger.isDebugEnabled()) logger.debug(data);
		CtConOhcPE29Rs response = null;
		try {
			response = serviceLocator.getOHC_PE29_Port().callPE29(conOhcPE29Rq);
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getHeader(), ToStringStyle.MULTI_LINE_STYLE));
			if(logger.isDebugEnabled()) logger.debug(ToStringBuilder.reflectionToString(response.getData(), ToStringStyle.MULTI_LINE_STYLE));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
		
		return response;
	}
	//fin:ccc
	
}
